package com.xtq.countclass.dao;

import com.xtq.countclass.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 学生表;(User)表数据库访问层
 *
 * @author makejava
 * @since 2024-03-06 00:10:29
 */
public interface UserDao {
	
	/**
	 * 通过ID查询单条数据
	 *
	 * @param id 主键
	 * @return 实例对象
	 */
	@Select("select * from user where id=#{id}")
	User queryById(String id);
	
	/**
	 * 查询指定行数据
	 *
	 * @param user     查询条件
	 * @param pageable 分页对象
	 * @return 对象列表
	 */
	List<User> queryAllByLimit(User user, @Param("pageable") Pageable pageable);
	
	/**
	 * 统计总行数
	 *
	 * @param user 查询条件
	 * @return 总行数
	 */
	long count(User user);
	
	/**
	 * 新增数据
	 *
	 * @param user 实例对象
	 * @return 影响行数
	 */
	@Insert("insert into user (count.user.id, count.user.name, count.user.CREATED_BY, count.user.CREATED_TIME, count.user.UPDATED_BY, count.user.UPDATED_TIME, count.user.groupid, count.user.password, count.user.type) VALUES (#{id},#{name},#{createdBy},#{createdTime},#{updatedBy},#{updatedTime} ,#{groupid},#{password},#{type})")
	int insert(User user);
	
	/**
	 * 批量新增数据（MyBatis原生foreach方法）
	 *
	 * @param entities List<User> 实例对象列表
	 * @return 影响行数
	 */
	int insertBatch(@Param("entities") List<User> entities);
	
	/**
	 * 批量新增或按主键更新数据（MyBatis原生foreach方法）
	 *
	 * @param entities List<User> 实例对象列表
	 * @return 影响行数
	 * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
	 */
	int insertOrUpdateBatch(@Param("entities") List<User> entities);
	
	/**
	 * 修改数据
	 *
	 * @param user 实例对象
	 * @return 影响行数
	 */
	int update(User user);
	
	/**
	 * 通过主键删除数据
	 *
	 * @param id 主键
	 * @return 影响行数
	 */
	@Delete("delete from user where id = #{id}")
	int deleteById(String id);
	
	@Select("select * from user where #{id}=groupid")
	List<User> queryByGroupID(String id);
	
	@Delete("delete from count.user where count.user.groupid=#{groupid}")
	void deleteByGroupId(String groupid);
	@Update("update count.user set count.user.password=#{pwd} where user.id='2213042411'")
	Boolean updatePwd(String pwd);
}
